package com.whynot.frame.manythread.future;

public class FutureData implements Data {
	
	private static Boolean flag = false;
	
	private static RealData realData;
	
	/**
	 * 如果flag为true，得到已经执行过了。
	 * 没有执行就赋值给实际对象，并通知线程去执行请求getRequest
	 * @param data
	 */
	public synchronized void setRequest(RealData data) {
		if(flag){
			return;
		}
		
		this.realData = data;
		flag = true;
		//通知
		notify();
		//notifyAll();
	}
	
	/**
	 * 等到set完成，用户在做其他事情的时候，唤醒了get,那么get就去请求实际对象的get了
	 */
	public synchronized String getRequest() {
		while(!flag){
			try {
				wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		return this.realData.getRequest();

	}

}
